/**
 * 全局二维码生成方法
 */

import { QRCodeApi } from '@/api/utility/qrcode'

export interface QRCodeOptions {
  content: string
  size?: number
  margin?: number
  logoUrl?: string
  logoWidth?: number
  logoHeight?: number
  removeWhiteBorder?: boolean
}

export interface QRCodeResult {
  success: boolean
  data?: string
  error?: string
}

/**
 * 生成普通二维码
 * @param options 二维码配置选项
 * @returns 返回 base64 格式的二维码图片
 */
export async function generateQRCode(options: QRCodeOptions): Promise<QRCodeResult> {
  try {
    // 参数验证
    if (!options.content?.trim()) {
      return {
        success: false,
        error: '内容不能为空'
      }
    }

    // 设置默认值
    const params = {
      content: options.content.trim(),
      size: options.size || 300,
      margin: options.margin ?? 2
    }

    // 根据是否有 logo 选择不同的 API
    let response
    if (options.logoUrl) {
      // 生成带 Logo 的二维码
      response = await QRCodeApi.generateCloudQRCode({
        ...params,
        logoUrl: options.logoUrl,
        logoWidth: options.logoWidth || 60,
        logoHeight: options.logoHeight || 60,
        removeWhiteBorder: options.removeWhiteBorder ?? true
      })
    } else {
      // 生成普通二维码
      response = await QRCodeApi.generateQRCode(params)
    }

    if (response.code === 200 && response.data) {
      return {
        success: true,
        data: response.data
      }
    } else {
      return {
        success: false,
        error: response.message || '生成二维码失败'
      }
    }
  } catch (error: any) {
    console.error('生成二维码出错:', error)
    return {
      success: false,
      error: error.message || '生成二维码失败，请稍后重试'
    }
  }
}

/**
 * 快速生成二维码（使用默认配置）
 * @param content 二维码内容
 * @param size 二维码尺寸（默认 200）
 * @returns 返回 base64 格式的二维码图片或 null
 */
export async function quickGenerateQRCode(
  content: string,
  size: number = 200
): Promise<string | null> {
  const result = await generateQRCode({
    content,
    size,
    margin: 1
  })
  
  return result.success ? result.data! : null
}

/**
 * 批量生成二维码
 * @param contents 内容数组
 * @param size 统一尺寸
 * @returns 返回二维码结果数组
 */
export async function batchGenerateQRCode(
  contents: string[],
  size: number = 200
): Promise<QRCodeResult[]> {
  const promises = contents.map(content =>
    generateQRCode({ content, size, margin: 1 })
  )
  
  return Promise.all(promises)
}